<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./OL_SDK/include-openlayers-local.js"></script>
    <script src="./libs/gaode.js"></script>
</head>

<body>
    <button onclick="addPoint()">添加点要素</button>
    <div id="map">
    </div>
    <script>
        var docLayer = new Zondy.Map.Doc("", "myTestMap", {
            port: 6163,
            ip: 'localhost',
        })
        var map = new ol.Map({
            target: "map",
            layers: [gaode, docLayer],
            view: new ol.View({
                projection: 'EPSG:4326',
                center: [114.30, 30.50],
                zoom: 4
            })
        })
        // 往地图服务数据中添加点
        function addPoint() {
            // console.log('addPoint')
            /* 117, 39  mapgis */ // 天津附近
            /* 1、创建要素 Zondy  = 几何+样式+属性  */
            /* 1-1、几何  new Zondy.Object.FeatureGeometry */
            var gpoint = new Zondy.Object.GPoint(105, 39);//createPoint();
            var gpoint2 = new Zondy.Object.GPoint(105, 30);//createPoint();
            // 注：一般一次只加一个点。像这样一次加两个点。数据库中对坐标的记录可能只
            // 记录成了第一个值。且查询的时候会出问题。使查询这两个点联动了。
            //设置当前点要素的几何信息
            // 可以一次性添加多个点
            var fGeom = new Zondy.Object.FeatureGeometry({ PntGeom: [gpoint, gpoint2] });
            // var point = new ol.Feature({
            //     geometry:new ol.geom.Point()
            // })
            /* 1-2、样式  图形参数信息 */
            var pointInfo = new Zondy.Object.CPointInfo({
                Angle: 0,
                Color: 11,  //子图颜色
                Space: 0,
                SymHeight: 5,  //高度
                SymID: 31,  //子图号
                SymWidth: 5 //宽度
            });
            //设置当前点要素的图形参数信息
            var webGraphicInfo = new Zondy.Object.WebGraphicsInfo({
                /* 1-point  2--LineString  3--Area */
                InfoType: 1,
                PntInfo: pointInfo
            });
            /* 1-3、属性 */
            var attValue = ['武汉'];// 这个数组中的值，是跟mapgis中属性的那些键对应的
            // 默认的属性不算。从自己添加的第一个键开始
            //创建一个要素
            var feature = new Zondy.Object.Feature({
                fGeom: fGeom,
                GraphicInfo: webGraphicInfo,
                AttValue: attValue
            });
            //设置要素为点要素
            feature.setFType(1);
            /* 2、创建要素集 */
            //创建一个要素数据集
            var featureSet = new Zondy.Object.FeatureSet();
            //设置属性（字段）结构（mapgis数据库中除了默认的那些属性以外，新增的字段）
            var cAttStruct = new Zondy.Object.CAttStruct({
                FldName: ["love"],
                FldNumber: 1,
                FldType: ["string"]
            });
            featureSet.AttStruct = cAttStruct;
            //添加要素到要素数据集
            featureSet.addFeature(feature);
            /* 3、调用服务添加要素 */
            /* 第一个参数 igserver服务的名称
              第二个参数 是添加要素所在的图层(0 1 2 ……)
              // 这里第二个参数如果写错了，可能在添加时没有反应。
              // 不执行是否成功的回调。既不alert成功，也不alert失败。
              // 如果想要添加的是一个点要素，那也要注意，添加到的图层应该是
              // mapgis中的一个点图层。// 这样添加时，才会执行是否成功的回调。
             */
            var editService = new Zondy.Service.EditDocFeature("myTestMap", 4, {

            });
            // console.log('preAdd')
            //执行添加点要素功能
            // console.log(editService)
            // console.log(featureSet)
            editService.add(featureSet, onPntSuccess);
        }
        //添加点要素回调函数
        function onPntSuccess(data) {
            console.log('fn-onPntSuccess')
            console.log(data, 'fn-onPntSuccess-data')// {succeed: true}
            if (data.succeed) {
                alert("添加点要素成功！");// 至此，就成功地把点添加到这个地图文档上来了。
                // 在mapGIS桌面端和发布的igServer服务端都能看到要素的变化。
                docLayer.refresh();
                // 不刷新的话，在移动或缩放地图而导致docLayer刷新时，才会看到新增的点。
            } else {
                alert("添加点要素失败！");
            }
        }
    </script>
</body>

</html>